package com.ycxy.sh.transaction.controller.admin;

import com.ycxy.sh.transaction.dao.entity.*;
import com.ycxy.sh.transaction.dao.vo.LayuiPageVo;
import com.ycxy.sh.transaction.dao.vo.UserInfoStandardVo;
import com.ycxy.sh.transaction.service.*;
import com.ycxy.sh.transaction.util.KeyUtil;
import com.ycxy.sh.transaction.web.JsonResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.List;

/**
 * @Author: hlt
 * @Description: 管理员控制器
 * @Date: 2020/3/10 16:54
 */
@Slf4j
@Api(tags = "1.管理员管理模块")
@Controller
public class AdminController {
    @Autowired
    private LoginService loginService;
    @Autowired
    private UserInfoService userInfoService;
    @Autowired
    private AdminService adminService;

    /**
     * 管理员跳转登录
     */
    @GetMapping("/admin")
    public String admintologin() {
        return "/admin/login/login";
    }


    /**
     * 管理员登录
     * 1.判断输入账号的类型
     * 2.判断是否为管理员或者超级管理员
     * 3.登录
     * */
    @ApiOperation("管理员登录")
    @ResponseBody
    @PostMapping("/admin/login")
    public JsonResult<String> adminlogin(@RequestBody Login login, HttpSession session){
        log.debug("开始处理【管理员登录】的请求，参数：{}", login);
        loginService.login(login,session);
        return JsonResult.ok("登录成功");
    }

    /**
     * 用户列表
     * */
    @GetMapping("/admin/userlist")
    public String userlist(){
        return "/admin/user/userlist";
    }

    /**
     * 管理员列表
     * */
    @RequiresPermissions("admin:set")
    @GetMapping("/admin/adminlist")
    public String adminlist(){
        return "/admin/user/adminlist";
    }

    /**
     * 分页查询不同角色用户信息
     * roleid：1普通成员 2管理员
     * userstatus：1正常 0封号
     */
    @GetMapping("/admin/userlist/{roleid}/{userstatus}")
    @ResponseBody
    public LayuiPageVo pageUserInfo(int limit, int page, @PathVariable("roleid") Integer roleid, @PathVariable("userstatus") Integer userstatus) {
        LayuiPageVo layuiPageVo = adminService.pageUserInfo(limit, page, roleid, userstatus);
        log.debug("分页查询不用角色的用户信息成功");
        return layuiPageVo;
    }

    /**
     * 设置为管理员或普通成员（roleid）
     * 1：普通成员   2：管理员
     */
    @PostMapping("/admin/set/administrator/{userid}/{roleid}")
    @ResponseBody
    public JsonResult setadmin(@PathVariable("userid") Long userid, @PathVariable("roleid") Integer roleid) {
        adminService.setUserType(userid,roleid);
        log.debug("操作成功");
        return JsonResult.ok();
    }

    /**
     * 根据用户id和账号类型（userStatus）
     * 将用户封号或解封
     * 0：封号  1：解封
     */
    @PostMapping("/admin/user/forbid/{userid}/{userstatus}")
    @ResponseBody
    public JsonResult adminUserStatus(@PathVariable("userid") Long userid, @PathVariable("userstatus") Integer userstatus) {
        adminService.adminUserStatus(userid,userstatus);
        log.debug("操作成功");
        return JsonResult.ok();
    }

    /**
     * 管理员商品列表
     * */
    @GetMapping("/admin/product")
    public String adminproduct(){
        return "/admin/product/productlist";
    }

    /**
     * 分页管理员查看各类商品信息
     *前端传入页码、分页数量
     *前端传入商品信息状态码（commodity_status）-->全部:100，违规:0，已审核:1，待审核:3 已完成:4
     * 因为是管理员查询，将userid设置为空
     */
    @GetMapping("/admin/commodity/{commstatus}")
    @ResponseBody
    public LayuiPageVo pageAdminCommodity(@PathVariable("commstatus") Integer commodityStatus, int limit, int page) {
        LayuiPageVo layuiPageVo = adminService.pageAdminCommodity(commodityStatus, limit, page);
        log.debug("成功查看各类商品信息");
        return layuiPageVo;
    }

    /**
     * 管理员对商品的审核
     * 前端传入商品id（commid）
     * 前端传入操作的商品状态（commstatus）-->违规:0  通过审核:1
     * */
    @ResponseBody
    @PostMapping("/admin/changecommstatus/{commid}/{commstatus}")
    public JsonResult ChangeCommodityStatus(@PathVariable("commid") Long commodityId, @PathVariable("commodityStatus") Integer commodityStatus) {
        adminService.ChangeCommodityStatus(commodityId,commodityStatus);
        log.debug("管理员对商品的审核成功");
        return JsonResult.ok();
    }
}
